//  下载 mysql 包
//  导入 
const mysql = require('mysql')
const express = require('express')
//  建立 与 mysql 数据库的链接 
const db = mysql.createPool({
    host: '127.0.0.1',  //  数据库 ip 地址
    port: 3306,          //   端口号   
    user: 'root',      //   登录数据库的账号
    password: 'admin123',   // 登录数据库的密码
    database: "new_mydb01"  //  指定要操作的数据库
})
const newPool = (sqlStr, params) => {
    return new Promise((reslove, reject) => {
        db.query(sqlStr, params, (err, result) => {
            if (err) return reject(err)
            reslove(result)
        })
    })
}
// 测试 mysql 模块能否正常工作
// 调用  db.query('select 1',(err,result)=>{
// if(err) return console.log(err.message);
// 只要能打印出 [ RowDataPacket {'1':1}] 的结果就证明数据库链接正常
// console.log(result)
// })
// db.query('select 1', (err, result) => {
//     if (err) return console.log(err.message)
//     // 只要能打印出 [ RowDataPacket {'1':1}] 的结果就证明数据库链接正常
//     console.log(result)
// });

/** 查询 users 表中 所有数据*/
// db.query(sql语句,回调函数)
const sqlStr = 'select * from users'
// db.query(sqlStr, (err, result) => {
//     // 注意： 如果执行的是 select 查询语句 执行结果是数组
//     if (err) return console.log(err)
//     console.log('查询数据成功', result)
// })
newPool(sqlStr).then(res => {
    // console.log(res)
})

/** 插入数据 */
// 向 users 表中新增数据，其中username 为 Spider-Man，password为 pcc123；
// 1. 定义插入数据
const insertData = { username: 'Spider-Man', password: 'pcc123' }
// 2. 定义 sql 语句  其中英文 ? 表示占位符
const sqlInsertStr = 'insert into users (username,password) values(?,?)'
// 3. 使用数组形式 依次为占位符 ?  指定具体的值
// db.query(sqlInsertStr, [insertData.username, insertData.password], (err, result) => {
//     /** 注意： 如果执行的是 insert into 插入语句 返回结果是一个对象 通过affectedRows === 1 判断是否新增成功
//      *  result = {
//          fieldCount: 0,
//         affectedRows: 1,  影响行数
//         insertId: 6,      插入的id
//         serverStatus: 2,
//         warningCount: 0,
//         message: '',
//         protocol41: true,
//         changedRows: 0
//         }
//      */
//     if (err) return console.log(err)
//     if (result.affectedRows === 1) {
//         console.log('插入数据成功', result)
//     }
// })
// 插入数据的快捷方式
// 如果新增数据 对象的每个属性和数据表中字段一一对应，可以通过下面快捷方式快速插入数据

// const sqlInsert = 'insert into users set ?'
// const insertObj = { username: 'Spider-Woman10210', password: 'qqp123' }
// db.query(sqlInsert, insertObj, (err, result) => {
//     if (err) return console.log(err)
//     if (result.affectedRows === 1) {
//         console.log('插入数据成功', result)
//     }
// })

/** 更新数据 */
// const updateData = { id: 8, username: '更新后的数据', password: '990077', status: 1 }
// const updateStr = 'update users set username=?,password=?,status=? where id=?'
// db.query(updateStr, [updateData.username, updateData.password, updateData.status, updateData.id], (err, result) => {
//     if (err) return console.log(err)
//     //  注意： 如果执行的是 update 更新语句 返回结果是一个对象 通过affectedRows === 1 判断是否更新成功
//     if (result.affectedRows === 1) {
//         console.log('更新数据成功', result)
//     }
// })

// const updateData = { id: 8, username: '更新后的数据', password: '990077', status: 1 }
// const updateStr = 'update users set username=?,password=?,status=? where id=?'

/** 更新的便捷方式*/
// const updateData = { id: 10, username: '便捷更新', status: 1 }
// const updateStr = 'update users set ? where id=?'
// db.query(updateStr, [updateData, updateData.id], (err, result) => {
//     if (err) return console.log(err)
//     //  注意： 如果执行的是 update 更新语句 返回结果是一个对象 通过affectedRows === 1 判断是否更新成功
//     if (result.affectedRows === 1) {
//         console.log('更新数据成功', result)
//     }
// })

/** 删除数据*/
// 推荐使用 id 等具有唯一性的标识删除数据
const deleteStr = 'delete from users where id = ?'
// 注意：如果sql语句中有多个占位符 必须使用数组为每个占位符指定具体的值
// 如果sql 语句中只有一个占位符 则可以省略数组
// db.query(deleteStr, 14, (err, result) => {
//     if (err) return console.log(err)
//     if (result.affectedRows === 1) {
//         //  注意： 如果执行的是 delete 删除语句 返回结果是一个对象 通过affectedRows === 1 判断是否删除成功
//         console.log('删除数据成功', result)
//     } else {
//         console.log('result', result)
//     }
// })

// 使用标记模拟删除  使用 update 更新 isDelete字段模拟删除
// 标记删除 
const singDeleteStr = 'update users set isDelete=1 where id = ?'
// db.query(singDeleteStr, 10, (err, result) => {
//     if (err) return console.log(err)
//     if (result.affectedRows === 1) {
//         console.log('标记删除成功')
//     }
//     db.query('select * from users where isDelete<>1', (err, res) => {
//         if (err) return console.log(err)
//         console.log('获取标记删除后的新数据', res)
//     })
// })



/**  node + mysql */
const apiRouter = require('./modules/api')
const server = express()

server.use('/api', apiRouter)
// const router = express.Router()
// server.use('/api', router)


// router.get('/getUsers', async (req, res) => {
//     const status = req.query.status
//     const queryStr = 'select * from users where isDelete!=1 and status=?'
//     const result = await newPool(queryStr, status)
//     console.log(result)
//     if (result.length > 0) {
//         res.status(200).json({
//             code: 200,
//             data: result,
//             msg: '查询成功'
//         })
//     } else {
//         res.status(200).json({
//             code: 200,
//             data: null,
//             msg: '查询成功'
//         })
//     }
// })
// // 查询分页参数
// router.get('/getUserPage', async (req, res) => {
//     const pageSize = req.query.pageSize || 5
//     const page = req.query.page || 1
//     const status = req.query.status
//     const queryStr = 'select * from users where isDelete!=1  limit ?,? '
//     console.log('12131212', [(page - 1) * pageSize, page * pageSize])
//     const result = await newPool(queryStr, [(page - 1) * pageSize, +pageSize])
//     console.log(result.length)
//     if (result.length > 0) {
//         res.status(200).json({
//             code: 200,
//             data: result,
//             msg: '查询成功'
//         })
//     } else {
//         res.status(200).json({
//             code: 200,
//             data: null,
//             msg: '查询成功'
//         })
//     }
// })

server.get('*', (req, res) => {
    res.status(404).send('404 not fount')
})

server.listen(8080, () => {
    console.log('8080 端口启动成功')
})